/******************************************************************************
 *  _____     _____
 *  \  __\    \  __\
 *   \ \_\\    \ \_\\
 *    \  __\SS  \  __\roject
 *     \_\       \_\
 *
 * Mateusz Maciąg, Rafał Urbański
 * Komputerowe Systemy Sterowania
 *****************************************************************************/

#include "GPCController.h"

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/lu.hpp>
#include <boost/numeric/ublas/io.hpp>

#include <vector>

#include "Utils.h"

namespace RafMat
{
namespace SimEngine
{

using namespace std;
using namespace SimInterface;
using namespace Jano;

// FOR DEBUG PURPOSES
/*
static void printVect1(ostream& o, const std::string n, const GPCController::Matrix& m)
{
    o << n << ":[ ";
    RmnkSolver::Matrix::const_iterator1 it;
    for(it =m.begin1(); it != m.end1(); ++it)
        o << *it << ' ';
    o << "]" << endl;
}

static void printVect2(ostream& o, const std::string n, const GPCController::Matrix& m)
{
    o << n << ":[ ";
    RmnkSolver::Matrix::const_iterator2 it;
    for(it =m.begin2(); it != m.end2(); ++it)
        o << *it << ' ';
    o << "]" << endl;
}

static void printMat(ostream& o, const std::string n, const GPCController::Matrix& m)
{
    o << n << ":[ ";
    for(int i = 0; i < m.size1(); i++)
    {
        for(int j = 0; j < m.size2(); j++)
        {
            cout << m(i, j) << ' ';
        }
        cout << '\n';
    }
    o << "]" << endl;
}*/

const std::string GPCController::CONF_ALL = "*";
const std::string GPCController::CONF_GAIN = "gain";
const std::string GPCController::CONF_H = "h";
const std::string GPCController::CONF_L = "l";
const std::string GPCController::CONF_RHO = "rho";
const std::string GPCController::CONF_ALPHA = "alpha";
const std::string GPCController::CONF_DA = "da";
const std::string GPCController::CONF_DB = "db";
const std::string GPCController::CONF_DLY = "dly";

GPCController::GPCController(SimInterface::ISimulator &isim,
                             unsigned H, unsigned L, double alpha, double rho,
                             unsigned dA, unsigned dB, unsigned dly, double initGain)
    : ControllerBase(isim, "GPC", "GPCController"),
      m_gain(initGain),
      m_H(H), m_L(L), m_alpha(alpha), m_rho(rho),
      m_dA(dA), m_dB(dB), m_dly(dly),
      m_gpcDelay(100), m_simulationTime(0)
{
    InitializeSignalSP();
    reset(true);
}

void GPCController::reset()
{
    reset(true);
}

void GPCController::reset(bool clearMem)
{
    //m_rmnk.reset(new WrmnkARXWrapper(m_dA , m_dB, m_dly));

    //m_preIdentifiedObject.reset(new PreIdentifiedObject());
    m_Relay.reset(new Relay(0.04, 0.01));
    m_simulationTime = 0;

    m_identifiedObject.reset(new DiscreteObject(getSimulator(), m_dA, m_dB, m_dly));
    m_identifiedParams.reset(new DiscreteObjectParams(*m_identifiedObject));

    // Utwórz model układu regulacji (identyfikowany).
    m_identifiedObject->insertParameters(m_identifiedParams);
    m_identifiedObject->enableNoise(false);
    m_identifiedObject->updateParameters();

    updateHorizonts();

    if(clearMem)
    {
        m_memY.clear();
        m_memDU.clear();
    }
    m_memY.resize(m_dA + 1);
    m_memDU.resize(m_dB + m_dly + 1);

    m_gpcDelay = 100;

}
// Przygotowanie sygnału testowego
void GPCController::InitializeSignalSP()
{
    double tab[] ={
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.800000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.700000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.600000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.500000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.100000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.200000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.300000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.400000000000000,
        0.40000000000000
    };

    m_predictionSP.assign(&tab[0], &tab[0]+4000);
}


double GPCController::simulateControllerStep(double setPoint, double processVar)
{
    // Zamiast dołączać przestrzeń nazw wybieramy tylko potrzebne funkcje.
    using boost::numeric::ublas::prod;
    using boost::numeric::ublas::trans;

    double gpcOutput = currentOutput();

    /*// Regulator musi mieć czas na samodostrojenie się, dlatego opóźniamy
    // załączanie regulacji predykcyjnej.
    if(m_gpcDelay)
    {
        // Na czas ustabilizowania się RMNK stosujemy klasyczną regulację P.
        m_rmnk->identify(gpcOutput, processVar);

        --m_gpcDelay;
        return m_gain * currentError();
    }

    // Wykonanie kroku identyfikacji.
    m_rmnk->identify(gpcOutput, processVar);*/

    // Symulacja odpowiedzi skokowej modelu odniesienia:
    Matrix matQ = simulateStepResponse();
    m_matQT = trans(matQ);  // Transpozycja

    //printMat(cout, "Q", matQ);

    // Obliczamy qT = 1T * inv(QT*Q + rho*I) * QT
    m_matTmp = prod(m_matQT, matQ);
    m_matTmp += m_rho * IdentityMatrix(m_L, m_L);

    invertMatrix(m_matTmp, m_matTmp);
    m_matTmp = prod(m_matTmp, m_matQT);

    //printMat(cout, "Qinv", m_matTmp);

    // Wyciągamy pierwszy wiersz tejże macierzy
    copy(m_matTmp.begin2(), m_matTmp.end2(), m_qT.begin2());

    //printVect2(cout, "qT", m_qT);

    // Symulacja modelu odniesienia
    vector<double> w0 = simulateReferenceObj(setPoint, processVar);

    // Symulacja odpowiedzi swobodnej
    vector<double> y0 = simulateFreeResponse();

    // Obliczenie przyrostu wyjścia regulatora
    double currentDU = inner_product(m_qT.begin2(), m_qT.end2(), w0.begin(), 0.0);
    currentDU -= inner_product(m_qT.begin2(), m_qT.end2(), y0.begin(), 0.0);

    // Obliczamy wyjście regulatora
    gpcOutput += currentDU;

    // Zapamiętujemy próbkę sterowania (przyrostowo)
    m_memDU.push_front(currentDU);
    m_memDU.pop_back();

    // Zapamiętujemy próbkę ze sprzężenia zwr. (bezwzględnie)
    m_memY.push_front(processVar);
    m_memY.pop_back();

    return Utils::limitValue(gpcOutput, 0.0, 1.0);

    //double retVal = Utils::limitValue(gpcOutput, 0.0, 1.0);
    //static double meanVal = 0.0;

    //meanVal = meanVal + 0.4 * (retVal - meanVal);
    //return meanVal;
    //return gpcOutput;
}

// metoda pierwotna dla modelu odniesienia
GPCController::Matrix  GPCController::simulateStepResponse()
{
    vector<double> hSamples;    // Zebrane próbki odpowiedzi (jest ich H).
    hSamples.reserve(m_H);

    // Uaktualniamy parametry na podstawie wyników identyfikacji.
    //m_identifiedParams->setTransferFcn(m_rmnk);

    // Wybór obiektu w zależności od poziomu na którym znajduje się ciecz w zbiorniku zakres <0; 1>
    //chooseObject();

    m_Relay->setBigRange(0.09);  // Ustawienie zakresu histerezy dla większych przedziałów
    m_Relay->setSmallRange(0.00);// Ustawienie zakresu histerezy dla mniejszych zakresów
    m_Relay->SelectModel(this->currentProcessVariable());   // Wybór modelu
    m_preIdentifiedObject = m_Relay->getSelectedModel();    // Dostęp do wybranego modelu

    // Uaktualnienie parametrów na podstawie wybranego obiektu.
    m_identifiedParams->setTransferFcn(1, 0, 0, m_preIdentifiedObject.getPolyB(), m_preIdentifiedObject.getPolyA(), m_preIdentifiedObject.getDelay());

    // Zerujemy w. początkowe:
    m_identifiedObject->reset();
    m_identifiedObject->simulateStep(1.0);

    for(unsigned i = 0; i < m_H; i++)
        hSamples.push_back(m_identifiedObject->simulateStep(1.0));

    // hSamples zawiera próbki h(0), h(1), ..., h(H-1)

    // Tworzymy tą śmieszną macierz Q (HxL)
    Matrix Q(m_H, m_L);

    for(unsigned i = 0; i < m_H; i++)
        for(unsigned j = 0; j < m_L; j++)
            Q(i,j) = (i < j) ? 0 : hSamples[i-j];

    return Q;
}


//Metoda zmodyfikowana dla sygnału schodkowego
vector<double> GPCController::simulateReferenceObj(double u0, double y0)
{
    // Model odnisienia jest bardzo prosty i nie ma potrzeby
    // używać klasy DiscreteObject.

    vector<double> w0;   // Trzymając się oznaczeń: w0 - odpowiedź układu odniesienia
    w0.reserve(m_H);

    w0.assign(m_predictionSP.begin()+m_simulationTime, m_predictionSP.begin()+m_simulationTime+m_H);

    m_simulationTime += 1;

    return w0;
}

// Metoda pierwotna
/*
vector<double> GPCController::simulateReferenceObj(double u0, double y0)
{
    // Model odnisienia jest bardzo prosty i nie ma potrzeby
    // używać klasy DiscreteObject.

    vector<double> w0;   // Trzymając się oznaczeń: w0 - odpowiedź układu odniesienia
    w0.reserve(m_H);

    // y(i) = (1-a)*u(i) + a*y(i-1)
    w0.push_back( (1-m_alpha)*u0 + m_alpha*y0 );

    // Potrzebujemy łącznie H próbek. Zakładamy stałe wejście u(i+j) = u0
    for(unsigned i=1; i < m_H; i++)
    {
        w0.push_back( (1-m_alpha)*u0 + m_alpha*w0.back() );
    }

    return w0;
}*/

vector<double> GPCController::simulateFreeResponse()
{
    /*Polynomial tfA = m_rmnk->getEstimatedA();
    Polynomial tfB = m_rmnk->getEstimatedB();
    unsigned tfDly = m_rmnk->getDelay();*/

    Polynomial tfA = m_preIdentifiedObject.getPolyA();
    Polynomial tfB = m_preIdentifiedObject.getPolyB();
    unsigned tfDly = m_preIdentifiedObject.getDelay();

    // Odpowiedź liczona jest przyrostowo (deltaU), co wymaga wymnożenia wielomianu
    // A przez przyrost (1-z^(-1)), co daje wielomian postaci:
    // [ 1 (a1-1) (a2-a1) (a3-a2) ... (adA - a(dA-1))  -adA]
    // Łatwo zauważyć, że wykonywane są różnice podobnie jak w funkcji adjacent_difference
    // Powstały wielomian jest o 1 stopień wyższy. Poniższy algorytm tworzy powyższy wielomian
    // jalby od tyłu (wartości są przeciwne). Chodzi o to, żeby uwzględnić też ten dodatkowy
    // współczynnik o stopniu dA+1. Za pierwszy współczynnik arbitralnie przyjmujemy 1.
    Polynomial zA(tfA.degree() + 1, 0);
    adjacent_difference(tfA.rbegin(), tfA.rend(), zA.rbegin());
    zA[0] = 1; // a0

    // Tymczasowe pamięci:
    SampleMemory tmpMemY(m_memY);
    SampleMemory tmpMemDU(m_memDU);

    vector<double> y0;
    y0.reserve(m_H);

    for(unsigned i= 0; i <= m_H; i++)
    {
        double y = inner_product(zA.begin()+1, zA.end(), tmpMemY.begin(), 0.0);
        y += inner_product(tfB.begin(), tfB.end(), tmpMemDU.begin()+tfDly, 0.0);

        if(i > 0)
            y0.push_back(y);

        tmpMemDU.push_front(0.0);
        tmpMemDU.pop_back();
        tmpMemY.push_front(y);
        tmpMemY.pop_back();
    }

    return y0;
}

// Implementacja meotdy wyboru na podstawie identyfikacji wykonanej w Matlabie

/*void GPCController::chooseObject()
=======
// I rząd
void GPCController::chooseObject()
>>>>>>> ee50a52727c3d8f874638d791e8c44d5ef9110db
{
    double PV = this->currentProcessVariable();

    if(PV <= 0.15)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.025873;
        polyA[1] = -0.9742;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.15 && PV <= 0.25)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.014011;
        polyA[1] = -0.986;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.25 && PV <= 0.35)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.0096428;
        polyA[1] = -0.99036;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.35 && PV <= 0.39)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.0080867;
        polyA[1] = -0.99191;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.39 && PV <= 0.46)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.006687;
        polyA[1] = -0.99332;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.46 && PV <= 0.5)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.052039;
        polyA[1] = -0.94796;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.5 && PV <= 0.6)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.032014;
        polyA[1] = -0.96799;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.6 && PV <= 0.7)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.015401;
        polyA[1] = -0.9846;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.7 && PV <= 0.78)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.0088572;
        polyA[1] = -0.99114;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.78 && PV <= 1)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.0053621;
        polyA[1] = -0.99464;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
}*/

// Implementacja meotdy wyboru na podstawie identyfikacji wykonanej w Matlabie
/*void GPCController::chooseObject()
{
    double PV = this->currentProcessVariable();

    if(PV <= 0.15)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.008355;
        polyA[1] = -1.6922;
        polyA[2] = 0.70054;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.15 && PV <= 0.25)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.004261;
        polyA[1] = -1.7029;
        polyA[2] = 0.70718;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.25 && PV <= 0.35)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.0036725;
        polyA[1] = -1.6225;
        polyA[2] = 0.6262;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.35 && PV <= 0.39)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.0042159;
        polyA[1] = -1.4801;
        polyA[2] = 0.48436;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.39 && PV <= 0.46)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.0028804;
        polyA[1] = -1.5721;
        polyA[2] = 0.57493;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.46 && PV <= 0.5)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.020886;
        polyA[1] = -1.6282;
        polyA[2] = 0.64913;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.5 && PV <= 0.6)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.012104;
        polyA[1] = -1.6362;
        polyA[2] = 0.64833;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.6 && PV <= 0.7)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.0061325;
        polyA[1] = -1.6073;
        polyA[2] = 0.61345;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.7 && PV <= 0.78)
    {
        Polynomial polyA(2, 1);
        Polynomial polyB;

        polyB[0] = 0.0044527;
        polyA[1] = -1.5;
        polyA[2] = 0.50449;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.78 && PV <= 1)
    {
        Polynomial polyA(1, 1);
        Polynomial polyB;

        polyB[0] = 0.0053621;
        polyA[1] = -0.99464;

        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
<<<<<<< HEAD
}
*/


// Implementacja metody wyboru na podstawie identyfikacji zaimplementowanej w aplikacji
/*void GPCController::chooseObject()
{
    Polynomial polyA(1, 1);
    Polynomial polyB;

    double PV = this->currentProcessVariable();

    if(PV <= 0.15)
    {
        polyB[0] = 0.036558;
        polyA[1] = -0.962478;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.15 && PV <= 0.25)
    {
        polyB[0] = 0.0159227;
        polyA[1] = -0.983888;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.25 && PV <= 0.35)
    {
        polyB[0] = 0.0104441;
        polyA[1] = -0.989476;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.35 && PV <= 0.4)
    {
        polyB[0] = 0.00835383;
        polyA[1] = -0.991689;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.4 && PV <= 0.445)
    {
        polyB[0] = 0.00748343;
        polyA[1] = -0.992504;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.445 && PV <= 0.455)
    {
        polyB[0] = 0.006;
        polyA[1] = -0.994;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.455 && PV <= 0.465)
    {
        polyB[0] = 0.08;
        polyA[1] = -0.92;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.465 && PV <= 0.475)
    {
        polyB[0] = 0.09;
        polyA[1] = -0.91;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.475 && PV <= 0.545)
    {
        polyB[0] = 0.0719462;
        polyA[1] = -0.928038;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.545 && PV <= 0.61)
    {
        polyB[0] = 0.0316086;
        polyA[1] = -0.96836;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.61 && PV <= 0.71)
    {
        polyB[0] = 0.0160585;
        polyA[1] = -0.98385;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.71 && PV <= 0.79)
    {
        polyB[0] = 0.00847777;
        polyA[1] = -0.991486;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
    else if(PV > 0.79 && PV <= 1)
    {
        polyB[0] = 0.0329958;
        polyA[1] = -0.966292;
        m_preIdentifiedObject.reset(new Jano::PreIdentifiedObject(polyA, polyB, 0));
    }
}
*/

/// TODO: Metoda dubluje się w WRMNK. Wrzucić ją do jakiejś osobnej klasy statycznej, albo Utils.
bool GPCController::invertMatrix(const Matrix& input, Matrix& inv)
{
    typedef boost::numeric::ublas::permutation_matrix<std::size_t> pmatrix;
    using boost::numeric::ublas::lu_factorize;
    using boost::numeric::ublas::lu_substitute;

    // Utwórz kopię roboczą wejściowej macierzy
    Matrix A(input);

    // Utwórz macierz permutacji potrzebną do rozkładu LU.
    pmatrix pm(A.size1());

    // Rozkład LU
    int res = lu_factorize(A, pm);
    if (res != 0)
        return false;

    // Utwórz macierz jednostkową i przypisz go macierzy odwróconej.
    inv.assign(IdentityMatrix (A.size1()));

    // Podstawienie wg algorytmu LU w celu uzyskania macierzy odwróconej.
    lu_substitute(A, pm, inv);

    return true;
}

void GPCController::updateHorizonts()
{
    // W sumie sprowadza się to do zmiany rozmiaru macierzy q transponowane.
    m_qT = Matrix(1, m_H);
}

//
// SPRAWY ZWIĄZANE Z KONFIGURACJĄ OBIEKTU
//


std::string GPCController::getParameter(const std::string& param) const throw(std::logic_error)
{
    // Usuń ewentualne wiodące i końcowe spacje
    string tparam = Utils::trimWhiteSpaces(param);
    string outStr;

    // Strumień danych dla łańcucha argumentu.
    ostringstream ostr(outStr);

    // Wiem, sieczka straszna:
    if(tparam == CONF_H)
    {
        ostr << m_H;
    }
    else if(tparam == CONF_L)
    {
        ostr << m_L;
    }
    else if(tparam == CONF_RHO)
    {
        ostr << m_rho;
    }
    else if(tparam == CONF_ALPHA)
    {
        ostr << m_alpha;
    }
    else if(tparam == CONF_DA)
    {
        ostr << m_dA;
    }
    else if(tparam == CONF_DB)
    {
        ostr << m_dB;
    }
    else if(tparam == CONF_DLY)
    {
        ostr << m_dly;
    }
    else if(tparam == CONF_GAIN)
    {
        ostr << m_gain;
    }
    else
        return ControllerBase::getParameter(tparam);

    return ostr.str();
}

bool GPCController::setParameter(const std::string& param, const std::string& value) throw(std::logic_error)
{
    // Usuń ewentualne wiodące i końcowe spacje
    string tparam = Utils::trimWhiteSpaces(param);
    string tvalue = Utils::trimWhiteSpaces(value);

    // Strumień danych dla łańcucha argumentu.
    istringstream istr(tvalue);

    double tmpVal;
    istr >> tmpVal;

    if(istr.bad())
        throw iconf_error::syntaxError(*this, tvalue);

    if(tparam == CONF_ALL)
        safeSetParameters(tvalue);
    else if(tparam == CONF_H)
    {
        m_H = (unsigned)tmpVal;
        updateHorizonts();
    }
    else if(tparam == CONF_L)
    {
        m_L = (unsigned)tmpVal;
        updateHorizonts();
    }
    else if(tparam == CONF_RHO)
        m_rho = tmpVal;
    else if(tparam == CONF_ALPHA)
        m_alpha = tmpVal;
    else if(tparam == CONF_DA)
    {
        m_dA = (unsigned)tmpVal;
        reset(false);
    }
    else if(tparam == CONF_DB)
    {
        m_dB = (unsigned)tmpVal;
        reset(false);
    }
    else if(tparam == CONF_DLY)
    {
        m_dly = (unsigned)tmpVal;
        reset(false);
	}		
    else if(tparam == CONF_GAIN)
    { 
        m_gain = tmpVal;
		reset(false);
    }
    else
        throw iconf_error::unrecognizedParam(*this, tparam);

    return true;
}

void GPCController::safeSetParameters(const std::string& values)
{
    bool succeed;

    vector<double> vect = Utils::convertStrToVector(values, succeed);

    if(!succeed)
        throw iconf_error::syntaxError(*this, values);

    if(vect.size() != 8)
        throw iconf_error(*this, values, "GPC controller has exactly 8 parameters to set.");

    unsigned oldH = m_H;
    unsigned oldL = m_L;
    unsigned oldDA = m_dA;
    unsigned oldDB = m_dB;
    unsigned oldDly = m_dly;

    // Poniższe instrukcje muszą się udać:
    m_H = vect[0];
    m_L = vect[1];
    m_rho = vect[2];
    m_alpha = vect[3];
    m_dA = vect[4];
    m_dB = vect[5];
    m_dly = vect[6];
    m_gain = vect[7];

    if(m_H != oldH || m_L != oldL || m_dA != oldDA || m_dB != oldDB || m_dly != oldDly)
        reset(false);
}


// Wykorzystywane przy zapisie do pliku/strumienia.
SimFile::ConfigWriter& GPCController::dumpSpecificPar(SimFile::ConfigWriter& o) const
{
    o.pushParam(CONF_H, m_H);
    o.pushLineComment("Horyzont predykcji.");
    o.pushParam(CONF_L, m_L);
    o.pushLineComment("Horyzont sterowania.");
    o.pushParam(CONF_RHO, m_rho);
    o.pushParam(CONF_ALPHA, m_alpha);
    o.pushLineComment("Dynamika modelu odniesienia.");
    o.pushParam(CONF_DA, m_dA);
    o.pushParam(CONF_DB, m_dB);
    o.pushParam(CONF_DLY, m_dly);
    o.pushParam(CONF_GAIN, m_gain);
    return o;
}

}
}
